package com.zw.bigqueue.page;

import java.nio.ByteBuffer;

/**
 * 内存映射文件关系
 * @author create by zhouzongbo on 2020/7/8.
 */
public interface IMappedPage {

    /**
     * 获取映射页缓存的本地线程副本
     * @param position 开始位置
     * @return 从特殊的位置, 返回字节缓存区
     */
    ByteBuffer getLocal(int position);

    /**
     * 从内存映射页的缓冲区中获取数据
     * @param position 本地线程缓存区的开始位置
     * @param length 获取长度
     * @return 字节数组
     */
    byte[] getLocal(int position, int length);

    /**
     * 校验映射页是否已经关闭
     * @return boolean
     */
    boolean isClose();

    /**
     * 设置内存映射页
     * @param dirty dirty
     */
    void setDirty(boolean dirty);

    /**
     * 映射页的文件名
     * @return 文件名
     */
    String getPageFile();

    /**
     * 获取映射页的下标
     * @return 下标
     */
    long getPageIndex();

    /**
     * 持久化改变的数据到磁盘(同步)
     */
    void flush();
}
